package cn.adelyn.blog.blogmanager.dao;

import cn.adelyn.blog.blogmanager.dao.mapper.TagMapper;
import cn.adelyn.blog.blogmanager.pojo.model.TagModel;
import cn.adelyn.blog.blogmanager.pojo.vo.TagVO;
import cn.adelyn.common.core.execption.AdelynException;
import cn.adelyn.common.core.pojo.vo.PageVO;
import cn.adelyn.common.database.pojo.dto.PageDTO;
import cn.adelyn.common.database.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

@Repository
public class TagDAOService {

    @Autowired
    TagMapper tagMapper;

    @Autowired
    BlogTagDAOService blogTagDAOService;


    public void insertTag(TagModel tagModel) {
        tagMapper.insert(tagModel);
    }

    public void deleteTag(Long tagId) {
        long tagBlogs = blogTagDAOService.selectTagBlogsCount(tagId);

        if (tagBlogs != 0) {
            throw new AdelynException("当前tag存在blog，不可删除");
        }

        tagMapper.deleteById(tagId);
    }

    public void updateTag(TagModel tagModel) {
        UpdateWrapper<TagModel> updateWrapper = new UpdateWrapper<>();
        updateWrapper.lambda()
                .eq(TagModel::getTagId, tagModel.getTagId())
                .set(StringUtils.hasLength(tagModel.getTagName()), TagModel::getTagName, tagModel.getTagName());

        tagMapper.update(tagModel, updateWrapper);
    }

    public PageVO<TagVO> getTagPage(long userId, PageDTO pageDTO) {
        QueryWrapper<TagModel> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                .select(TagModel::getTagId, TagModel::getTagName)
                .eq(TagModel::getUserId, userId);

        Page<TagModel> page = tagMapper.selectPage(PageUtil.getPage(pageDTO), queryWrapper);

        PageVO<TagVO> pageVO = PageUtil.getPageVO(page, TagVO.class);

        pageVO.getList().forEach(tagVO -> {
            tagVO.setTagBlogNum(blogTagDAOService.selectTagBlogsCount(tagVO.getTagId()));
        });

        return pageVO;
    }
}
